home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 005 / ecstat.arc / ECSTAT2.BAS < prev    next >
Encoding:
BASIC Source File  |  1986-11-07  |  33.8 KB  |  850 lines

  1. 1000 DEFINT I-N: ON ERROR GOTO 18000: IF ANSW%=10 THEN 22000 ELSE 2210
  2. 2000 CLS
  3. 2010 PRINT "1   CATALOG DATA IN MEMORY" TAB(50) "ECSTAT COMMANDS"
  4. 2015 PRINT "2   CATALOG FILES ON DISK"
  5. 2020 PRINT "3   DISPLAY DATA"
  6. 2025 PRINT "4   PRINT DATA"
  7. 2030 PRINT "5   ENTER DATA"
  8. 2040 PRINT "6   EDIT DATA"
  9. 2050 PRINT "7   ";SDATA$
  10. 2060 PRINT "8   ";RDATA$
  11. 2062 PRINT "9   CHANGE SAMPLE RANGE"
  12. 2064 PRINT "10  COMPUTE A NEW VARIABLE"
  13. 2070 PRINT "11  ";MVC$
  14. 2090 PRINT "12  ";OLS$;" REGRESSION"
  15. 2092 PRINT "13  ";CO$
  16. 2093 PRINT "14  ";TSLS$
  17. 2094 PRINT "15  ";OSF$
  18. 2095 PRINT "16  ";OANDI$
  19. 2096 PRINT "17  SCATTER PLOT"
  20. 2098 PRINT "18  TIME PLOT"
  21. 2100 PRINT "19  LOAD DATA FROM AN ASCII FILE"
  22. 2103 PRINT "20  HOUSEKEEPING OPERATIONS"
  23. 2105 PRINT "21  RESTART PROGRAM"
  24. 2110 PRINT "22  EXIT PROGRAM"
  25. 2120 PRINT
  26. 2130 INPUT "ENTER DESIRED SERVICE (1-22) >",ANSWER
  27. 2140 ANSW%=ANSWER
  28. 2150 IF ANSW%=ANSWER AND ANSW%>=1 AND ANSW%<=22 THEN 2200
  29. 2160 PRINT "RESPONSE REQUIRES AN INTEGER BETWEEN 1 AND 21"
  30. 2170 GOSUB 19030:GOTO 2000
  31. 2200 ON ANSW% GOTO 2210,2500,2500,2500,2500,2500,2500,2500,2210,22000,2210,2210,2210,2210,2210,2210,2210,2210,2500,2500,2500,2210
  32. 2210 ON ANSW% GOSUB 3000,3100,4000,4010,5000,6000,7000,8000,20000,3080,9000,11000,26000,28000,27000,29000,25000,25300,8300,3200,13000,14000
  33. 2300 REM RETURN HERE AFTER PERFORMING SERVICE
  34. 2400 GOTO 2000
  35. 2500 CHAIN "ECSTAT1.BAS",1500,ALL
  36. 3000 REM DATA CATALOG
  37. 3005 LP%=0
  38. 3010 CLS
  39. 3020 PRINT "NUMBER OF OBSERVATIONS PER VARIABLE: ";NUMOBS
  40. 3025 IF LP% THEN LPRINT "NUMBER OF OBSERVATIONS PER VARIABLE: ";NUMOBS
  41. 3030 PRINT "NUMBER OF DEFINED VARIABLES: ";NUMVAR
  42. 3035 IF LP% THEN LPRINT "NUMBER OF DEFINED VARIABLES: ";NUMVAR
  43. 3040 PRINT "NUMBER OF REMAINING VARIABLES: ";MAXVAR-NUMVAR: PRINT
  44. 3042 IF LP% THEN LPRINT "NUMBER OF REMAINING VARIABLES: ";MAXVAR-NUMVAR: LPRINT
  45. 3048 GOSUB 24800
  46. 3049 PRINT: IF LP% THEN LPRINT
  47. 3050 PRINT "DEFINED VARIABLES ARE:" : PRINT
  48. 3055 IF LP% THEN LPRINT "DEFINED VARIABLES ARE:" : LPRINT
  49. 3060 FOR I=0 TO NUMVAR-1
  50. 3062  PRINT NAMES$(I),
  51. 3064  IF LP% THEN LPRINT NAMES$(I),
  52. 3066 NEXT I
  53. 3070 GOSUB 19100
  54. 3080 IF LP% OR SCR% THEN 3010 ELSE RETURN
  55. 8170 GOSUB 19000: RETURN
  56. 8600 CLOSE#1: PRINT "INPUT PAST END OF DATA": GOSUB 19030: RETURN
  57. 9000 REM
  58. 9020 CLS : COR%=1 : LP%=0: PRINT MVC$: PRINT
  59. 9040 MAXNAMES=NUMVAR:NEWNAMES=FALSE%:FORCE0%=FALSE%
  60. 9050 GOSUB 16000:IF NAMEERR THEN RETURN
  61. 9060 REM VARIABLE NUMBERS ARE IN LISTV 0 THROUGH LISTLEN-1
  62. 9070 GOSUB 17000
  63. 9075 CLS: GOSUB 24800
  64. 9077 PRINT : PRINT "VARIABLE","    MEAN  ","STANDARD DEV","   VARIANCE"
  65. 9080 IF LP% THEN LPRINT : LPRINT "VARIABLE","    MEAN  ","STANDARD DEV","   VARIANCE"
  66. 9085 COR%=0
  67. 9090 FOR I=0 TO LISTLEN-1
  68. 9100  PRINT PRNAM$(I),CSNG(XBAR#(I)),CSNG(SQR(XPX#(I,I)/NOBS)),CSNG(XPX#(I,I)/NOBS)
  69. 9105  IF LP% THEN LPRINT PRNAM$(I),CSNG(XBAR#(I)),CSNG(SQR(XPX#(I,I)/NOBS)),CSNG(XPX#(I,I)/NOBS)
  70. 9110 NEXT I : PRINT
  71. 9112 IF LISTLEN>6 THEN GOSUB 19030
  72. 9114 PRINT TAB(25) "CORRELATION COEFF" TAB(63) "CORRELATION COEFF"
  73. 9115 IF LP% THEN LPRINT : LPRINT TAB(25) "CORRELATION COEFF" TAB(63) "CORRELATION COEFF"
  74. 9118 FLIP%=1 : P$=SP22$
  75. 9120 FOR I=0 TO LISTLEN-1
  76. 9140  FOR J=I TO LISTLEN-1
  77. 9150   LSET P$=PRNAM$(I)+","+PRNAM$(J)
  78. 9160   IF XPX#(I,I)=0 OR XPX#(J,J)=0 THEN DP%=TRUE% : GOTO 9172
  79. 9170   PI=CSNG(XPX#(I,J)/SQR(XPX#(I,I)*XPX#(J,J)))
  80. 9172   IF FLIP%>0 THEN GOSUB 24500 ELSE GOSUB 24550
  81. 9174   FLIP%=(-1)*FLIP% : DP%=FALSE%
  82. 9180  NEXT J
  83. 9190 NEXT I
  84. 9200 GOSUB 19100
  85. 9210 IF LP% OR SCR% THEN GOTO 9075
  86. 9230 RETURN
  87. 11000 REM
  88. 11050 CLS : PR$=OLS$
  89. 11060 GOSUB 11700 : IF NAMEERR THEN RETURN
  90. 11160 IF LISTLEN>=NOBS THEN 11600
  91. 11170 REM ALLOCATE REGRESSION STORAGE
  92. 11200 GOSUB 11800
  93. 11260 NN=L1 : INV%=1: INST=0 : COR%=0 : GOSUB 17000 'COLLECT XPX#
  94. 11262 GOSUB 21000 : IF INVERR THEN RETURN
  95. 11306 RSUM=0 : SSR#=0 : UL#=0 : DW#=0 : LROB=NSMPL(NR2)
  96. 11308 FOR N2=2 TO NR2 STEP 2 : N1=N2-1
  97. 11310 FOR K=NSMPL(N1) TO NSMPL(N2)
  98. 11312 R#=X#(K,DEPVAR%)
  99. 11314 FOR I=0 TO LISTLEN-1
  100. 11316 R#=R#-BETA#(I)*X#(K+LAG(I),LISTV(I))
  101. 11318 NEXT I
  102. 11320 RESID#(K)=R# : RSUM=RSUM+R# : SSR#=SSR#+R#*R#
  103. 11321 DW#=DW#+(RESID#(K)-UL#)*(RESID#(K)-UL#) : UL#=RESID#(K)
  104. 11322 NEXT K : NEXT N2
  105. 11330 DW#=(DW#-RESID#(NSMPL(1))*RESID#(NSMPL(1)))/SSR#
  106. 11400 CLS : S2#=SSR#/(NOBS-LISTLEN)
  107. 11405 GOSUB 24000
  108. 11406 RETURN
  109. 11600 PRINT "NOT ENOUGH OBSERVATIONS"
  110. 11610 GOSUB 19000:RETURN
  111. 11700 PRINT PR$
  112. 11710 PRINT : PRINT "ENTER DEPENDENT VARIABLE"
  113. 11720 MAXNAMES=1:NEWNAMES=FALSE%:FORCE0%=FALSE%
  114. 11730 GOSUB 16000:IF NAMEERR THEN RETURN
  115. 11740 REM DEPENDENT VARIABLE IN LISTV(0)
  116. 11750 DEPVAR%=LISTV(0)
  117. 11760 PRINT : PRINT "ENTER EXPLANATORY VARIABLES"
  118. 11770 MAXNAMES=NUMVAR:NEWNAMES=FALSE%:FORCE0%=FALSE%
  119. 11780 GOSUB 16000:IF NAMEERR THEN RETURN
  120. 11785 REM VARIABLE NUMBERS ARE IN LISTV 0 THROUGH LISTLEN-1
  121. 11786 FOR I=0 TO L1: LISTRV(I)=LISTV(I): LAGR(I)=LAG(I): NEXT I : LR1=L1
  122. 11790 RETURN
  123. 11800 YBAR#=0 :YSS#=0
  124. 11810 FOR N2=2 TO NR2 STEP 2 : N1=N2-1
  125. 11820  FOR K=NSMPL(N1) TO NSMPL(N2)
  126. 11830   YBAR#=YBAR#+X#(K,DEPVAR%)
  127. 11840 NEXT K : NEXT N2 : YBAR#=YBAR#/NOBS
  128. 11850 FOR N2=2 TO NR2 STEP 2 : N1=N2-1
  129. 11855  FOR K=NSMPL(N1) TO NSMPL(N2)
  130. 11860   YSS#=YSS#+(X#(K,DEPVAR%)-YBAR#)*(X#(K,DEPVAR%)-YBAR#)
  131. 11865 NEXT K : NEXT N2 : RETURN
  132. 13100 RETURN
  133. 14000 REM
  134. 14010 REM EXIT PROGRAM
  135. 14015 PRINT IFNOT$
  136. 14020 PRINT AYS$; : INPUT "TO EXIT? (Y/N)>",ANSWER$
  137. 14030 IF ANSWER$="y" OR ANSWER$="Y" THEN SYSTEM
  138. 14040 RETURN
  139. 15000 REM
  140. 15070 IF NUMVAR<MAXVAR THEN 15100
  141. 15080 PRINT "SYMBOL TABLE FULL! NO NEW VARIABLES" : GOSUB 19050
  142. 15090 NAMEERR=TRUE%:RETURN
  143. 15100 FOUNDIT%=FALSE%
  144. 15110   FOR I=0 TO NUMVAR-1
  145. 15120   IF NAMEIS$=NAMES$(I) THEN FOUNDIT%=TRUE%
  146. 15130   NEXT I
  147. 15140 IF NOT FOUNDIT% THEN 15170
  148. 15150 PRINT CHR$(34);NAMEIS$;CHR$(34);" ALREADY DEFINED - NOT A NEW NAME"
  149. 15155 GOSUB 19000
  150. 15160 NAMEERR=TRUE%:RETURN
  151. 15170 NAMELOC=NUMVAR
  152. 15180 NUMVAR=NUMVAR+1
  153. 15190 NAMES$(NAMELOC)=NAMEIS$
  154. 15200 RETURN
  155. 16000 REM
  156. 16010 REM COLLECT A LIST OF NAMES AND RETURN LOCATIONS IN LISTV
  157. 16020 REM A SINGLE NAME IS A SPECIAL CASE
  158. 16030 NAMEERR=FALSE%
  159. 16040 IF MAXNAMES>1 THEN 16500
  160. 16050 INPUT "VARIABLE NAME IS?> ",NAMEIS$
  161. 16060 IF NAMEIS$="" THEN NAMEERR=TRUE%:RETURN
  162. 16070 IF NOT NEWNAMES THEN 16100
  163. 16080 GOSUB 15000
  164. 16090 IF NAMEERR THEN RETURN ELSE 16180
  165. 16100 NAMELOC=-1
  166. 16110   FOR I=0 TO NUMVAR-1
  167. 16120   IF NAMES$(I)=NAMEIS$ THEN NAMELOC=I
  168. 16130   NEXT I
  169. 16140 IF NAMELOC<>-1 THEN 16180
  170. 16150 PRINT CHR$(34);NAMEIS$;CHR$(34);" NOT DEFINED"
  171. 16160 PRINT "RE-ENTER NAME OR <ENTER> TO RETURN TO COMMAND MENU"
  172. 16170 GOTO 16050
  173. 16180 REM PUT NAMELOC IN LISTV
  174. 16190 LISTLEN=1
  175. 16200 LISTV(0)=NAMELOC
  176. 16210 RETURN
  177. 16500 REM COME HERE TO COLLECT A SERIES OF VARIABLES
  178. 16501 REM IF FORCE0% THEN INCLUDE CONSTANT AUTOMATICALLY
  179. 16502 IF NOT FORCE0% THEN LISTLEN=0 ELSE LISTV(0)=0:LISTLEN=1
  180. 16505 PRINT "ENTER VARIABLE NAME(S)"
  181. 16510 INPUT "SEPARATED BY A SPACE> ",ANSWER$
  182. 16520 IF ANSWER$="" THEN NAMEERR=TRUE%:RETURN
  183. 16535 FOR I=0 TO MAXVAR-1 : LAG(I)=0 : NEXT I
  184. 16540 LOOKFROM=1
  185. 16550 REM RETRIEVE A VARIABLE NAME
  186. 16560 SPACELOC%=INSTR(LOOKFROM,ANSWER$," ")
  187. 16570 IF SPACELOC%=0 THEN SPACELOC%=LEN(ANSWER$)+1
  188. 16580 NAMEIS$=MID$(ANSWER$,LOOKFROM,SPACELOC%-LOOKFROM)
  189. 16582 N1=INSTR(1,NAMEIS$,"[")
  190. 16584 IF N1<=1 THEN GOTO 16594
  191. 16590 N2=INSTR(N1,NAMEIS$,"]") : LAG$=MID$(NAMEIS$,N1+1,N2-N1-1)
  192. 16592 NAMEIS$=LEFT$(NAMEIS$,N1-1) : LG=VAL(LAG$)
  193. 16594 IF LG+NSMPL(1)<0 OR LG+NSMPL(NR2)>NUMOBS-1 THEN 16900
  194. 16597 NAMELOC=-1
  195. 16600 IF NAMEIS$="" THEN 16730
  196. 16610 IF NOT NEWNAMES THEN 16630
  197. 16620 GOSUB 15000: IF NAMEERR THEN RETURN
  198. 16630   FOR I=0 TO NUMVAR-1
  199. 16640   IF NAMES$(I)=NAMEIS$ THEN NAMELOC=I
  200. 16650   NEXT I
  201. 16660 IF NAMELOC<>-1 THEN 16700
  202. 16670 PRINT CHR$(34);NAMEIS$;CHR$(34);" NOT DEFINED"
  203. 16680 PRINT "RE-ENTER LIST OR "; : PRINT RMM$
  204. 16690 GOTO 16500
  205. 16700 REM PUT NAMELOC IN LISTV
  206. 16710 LISTV(LISTLEN)=NAMELOC : LAG(LISTLEN)=LG : LG=0
  207. 16720 LISTLEN=LISTLEN+1
  208. 16730 LOOKFROM=SPACELOC%+1
  209. 16740 IF LOOKFROM<=LEN(ANSWER$) THEN GOTO 16850
  210. 16745 L1=LISTLEN-1: IF INST THEN RETURN
  211. 16750 FOR I=0 TO L1
  212. 16760  PRNAM$(I)=NAMES$(LISTV(I))
  213. 16770  IF LAG(I)<0 THEN PRNAM$(I)=PRNAM$(I)+"["+STR$(LAG(I))+"]"
  214. 16780  IF LAG(I)>0 THEN PRNAM$(I)=PRNAM$(I)+"[+"+STR$(LAG(I))+"]"
  215. 16790 NEXT I : RETURN
  216. 16800 NAMEERR=FALSE% : LISTLEN=0 : INPUT "VARIABLE NAME IS?> ",ANSWER$
  217. 16810 GOTO 16520
  218. 16850 IF LISTLEN<MAXNAMES THEN 16560
  219. 16860 PRINT "TOO MANY NAMES"
  220. 16870 GOTO 16680
  221. 16900 PRINT "LAG OR LEAD IN ";NAMEIS$;" TAKES VARIABLE OUTSIDE DATA RANGE"
  222. 16910 GOSUB 19000 : NAMEERR=TRUE% : RETURN
  223. 17000 REM
  224. 17010 REM COLLECT PRODUCT MOMENT MATRIX IN XPX#
  225. 17020 L1=LISTLEN-1: ERASE XPX#,XPXI#,XBAR#,BETA#
  226. 17022 DIM XPX#(L1,L1),XPXI#(L1,L1),XBAR#(L1),BETA#(L1)
  227. 17025 IF COR% THEN GOTO 17200
  228. 17130   FOR I=0 TO LISTLEN-1
  229. 17140     FOR J=I TO LISTLEN-1
  230. 17145 FOR N2=2 TO NR2 STEP 2 : N1=N2-1
  231. 17150 FOR K=NSMPL(N1) TO NSMPL(N2)
  232. 17155  XPX#(I,J)=XPX#(I,J)+X#(K+LAG(I),LISTV(I))*X#(K+LAG(J),LISTV(J))
  233. 17160 NEXT K : NEXT N2 : NEXT J : NEXT I
  234. 17170 IF INST THEN RETURN
  235. 17178 FOR I=0 TO L1 : Y#(I)=0#
  236. 17180 FOR N2=2 TO NR2 STEP 2 : N1=N2-1
  237. 17182  FOR K=NSMPL(N1) TO NSMPL(N2)
  238. 17184   Y#(I)=Y#(I)+X#(K+LAG(I),LISTV(I))*X#(K,DEPVAR%)
  239. 17186 NEXT K : NEXT N2 : NEXT I
  240. 17188 GOTO 17500
  241. 17200 FOR I=0 TO L1
  242. 17215 XBAR#(I)=0#
  243. 17220  FOR N2=2 TO NR2 STEP 2 : N1=N2-1
  244. 17230   FOR K=NSMPL(N1) TO NSMPL(N2)
  245. 17240    XBAR#(I)=XBAR#(I)+X#(K+LAG(I),LISTV(I))
  246. 17250  NEXT K : NEXT N2
  247. 17260  XBAR#(I)=XBAR#(I)/NOBS
  248. 17320  FOR J=0 TO I
  249. 17330   FOR N2=2 TO NR2 STEP 2 : N1=N2-1
  250. 17340    FOR K=NSMPL(N1) TO NSMPL(N2)
  251. 17350     XPX#(I,J)=XPX#(I,J)+(X#(K+LAG(I),LISTV(I))-XBAR#(I))*(X#(K+LAG(J),LISTV(J))-XBAR#(J))
  252. 17360 NEXT K : NEXT N2
  253. 17363 XPX#(J,I)=XPX#(I,J)
  254. 17366 NEXT J: NEXT I
  255. 17370 RETURN
  256. 17500   FOR I=BI% TO LISTLEN-1
  257. 17510     FOR J=I+1 TO LISTLEN-1
  258. 17520     XPX#(J,I)=XPX#(I,J)
  259. 17530   NEXT J : NEXT I : RETURN
  260. 18000 REM
  261. 18010 REM HANDLE A FEW ERRORS HERE
  262. 18020 REM DID WE RUN OUT OF SPACE?
  263. 18030 IF ERR<>7 AND ERR<>14 THEN 18400
  264. 18040 PRINT "PROGRAM RAN OUT OF MEMORY IN LINE ";ERL
  265. 18050 PRINT "SORRY...": STOP
  266. 18400 IF ERR<>27 THEN 18420
  267. 18405 PRINT "PRINTER NOT ON OR OUT OF PAPER" : GOSUB 19000
  268. 18410 RESUME NEXT
  269. 18420 IF ERR<>9 THEN 18450
  270. 18430 PRINT "WENT BEYOND AVAILABLE DATA"
  271. 18440 PRINT "CHECK LAGS AND SAMPLE RANGE" : RESUME 8170
  272. 18450 IF ERR<>2 THEN 18490
  273. 18460 PRINT "SYNTAX ERROR"
  274. 18470 PRINT "YOUR STATEMENT DOESN'T MAKE SENSE TO ME"
  275. 18480 RESUME 8170
  276. 18490 IF ERR<>5 OR ERL<25000 OR ERL>26000 THEN 18520
  277. 18500 PRINT "ON IBM MUST HAVE GRAPHIC MONITOR AND USE ADVANCED BASIC"
  278. 18510 GOSUB 19000 : RESUME 8170
  279. 18520 IF ERR<>6 THEN 18900
  280. 18530 PRINT "Overflow" : RESUME 8170
  281. 18900 IF ERR<>5 OR (ERL<>12505 AND ERL<>12430 AND ERL<>11180 AND ERL<>17020 AND ERL<>12460 AND ERL<>3670 AND ERL<> 26060 AND ERL<>28070) THEN 18920
  282. 18910 RESUME NEXT 'OK, WE JUST ERASED SOMETHING THAT WASNT THERE
  283. 18920 PRINT "ERROR NUMBER ";ERR;" OCCURRED IN LINE ";ERL
  284. 18930 PRINT "REPORT CIRCUMSTANCES TO PROGRAM AUTHOR" : RESUME 8170
  285. 19000 REM HOLD SCREEN
  286. 19010 LOCATE 25,1 : PRINT "HIT ANY KEY TO RETURN TO COMMAND MENU>";
  287. 19020 IF INKEY$="" THEN 19020 ELSE RETURN
  288. 19030 LOCATE 25,1 : PRINT "HIT ANY KEY TO CONTINUE>";
  289. 19040 IF INKEY$="" THEN 19040
  290. 19045 CLS : RETURN
  291. 19050 FOR I=0 TO 1000 : NEXT I : RETURN
  292. 19100 IF LP% THEN WLP%=1
  293. 19105 LP%=0 : SCR%=0 : S$=" "
  294. 19108 LOCATE 25,1 : PRINT "DO YOU WANT TO SEE THE OUTPUT REPEATED? (S, P, OR <RETURN>)  "; : INPUT "",ANSWER$
  295. 19110 LSET S$=ANSWER$
  296. 19120 IF S$="P" OR S$="p" THEN LP%=1 ELSE IF S$="S" OR S$="s" THEN SCR%=1 ELSE IF S$<>" " THEN GOTO 19100
  297. 19130 IF WLP% THEN LPRINT CHR$(PADV%) : WLP%=0
  298. 19135 RETURN
  299. 19150 IF LP% THEN WLP%=1
  300. 19155 LP%=0 : SCR%=0 : S$=" "
  301. 19158 LOCATE 25,1 : PRINT "DO YOU WANT TO SEE THE COVARIANCE MATRIX? (S, P, OR <RETURN>)"; : INPUT "",ANSWER$
  302. 19160 LSET S$=ANSWER$
  303. 19170 IF S$="P" OR S$="p" THEN LP%=1 ELSE IF S$="S" OR S$="s" THEN SCR%=1 ELSE IF S$<>" " THEN GOTO 19150
  304. 19180 RETURN
  305. 19200 SCR%=0 : LOCATE 25,1
  306. 19207 INPUT "WOULD YOU LIKE THE FORECAST GRAPHED? (Y/N)> ",ANSWER$
  307. 19210 IF ANSWER$="Y" OR ANSWER$="y" THEN SCR%=1 : RETURN
  308. 19220 IF ANSWER$="N" OR ANSWER$="n" THEN RETURN ELSE 19200
  309. 20000 PRINT : INPUT "ENTER SAMPLE RANGE(S): ",ANSWER$
  310. 20010 IF ANSWER$="" THEN RETURN
  311. 20020 ANSWER$=ANSWER$+" " : LOOKFROM=1 : I=0 : NSMPL(0)=-1
  312. 20030 WHILE LOOKFROM<LEN(ANSWER$) AND I<20
  313. 20040 SPACELOC%=INSTR(LOOKFROM,ANSWER$," ")
  314. 20050 IF SPACELOC%=LOOKFROM THEN LOOKFROM=LOOKFROM+1 : GOTO 20040
  315. 20060 ANSWER=VAL(MID$(ANSWER$,LOOKFROM,SPACELOC%-LOOKFROM))-1 : ANSW%=ANSWER
  316. 20065 I=I+1 : NSMPL(I)=ANSW%
  317. 20070 IF ANSW%<>ANSWER OR NSMPL(I)<NSMPL(I-1) THEN PRINT "RANGE VALUES MUST BE INTEGERS AND MUST BE IN ASCENDING ORDER" : PRINT PTA$ : GOSUB 19030 : GOTO 20000
  318. 20071 IF (I MOD 2) AND NSMPL(I)=NSMPL(I-1) THEN PRINT "CANT USE SAME OBSERVATION TWICE" : PRINT PTA$ : GOSUB 19030 : GOTO 20000
  319. 20073 IF ANSW%>NUMOBS THEN PRINT "SAMPLE RANGE BEYOND AVAILABLE DATA" : PRINT PTA$ : GOSUB 19030 : GOTO 20000
  320. 20080 LOOKFROM=SPACELOC%+1
  321. 20090 WEND
  322. 20100 IF (I MOD 2) THEN PRINT "MUST HAVE AN EVEN NUMBER OF ENTRIES.  ";PTA$ : GOSUB 19030 : GOTO 20000
  323. 20110 NOBS=0 : NR2=I : FOR J=I+1 TO 11 : NSMPL(J)=0 : NEXT J
  324. 20120 FOR J=1 TO I STEP 2 : NOBS=NOBS+NSMPL(J+1)-NSMPL(J)+1 : NEXT J
  325. 20125 RETURN
  326. 21000 FOR I=0 TO NN : IND(I)=I : NEXT I : INVERR=0
  327. 21010 FOR I=0 TO NN
  328. 21020 GOSUB 21500
  329. 21030 SWAP IND(I),IND(IB) : IX=IND(I)
  330. 21040 IF XPX#(IX,I)=0# THEN GOTO 21900
  331. 21050  FOR J=I+1 TO NN
  332. 21060   JX=IND(J) : F#=-XPX#(JX,I)/XPX#(IX,I)
  333. 21070   FOR K=I TO NN
  334. 21080    XPX#(JX,K)=XPX#(JX,K)+F#*XPX#(IX,K)
  335. 21090   NEXT K
  336. 21100   XPX#(JX,I)=F#
  337. 21110  NEXT J
  338. 21120 NEXT I
  339. 21125 IF INST THEN RETURN
  340. 21130 REM SOLVE FOR BETA
  341. 21140 GOSUB 21600
  342. 21150 IN=IND(NN)
  343. 21160 BETA#(NN)=YS#(NN)/XPX#(IN,NN)
  344. 21170 FOR I=NN-1 TO 0 STEP -1
  345. 21180  IX=IND(I) : SUM#=0#
  346. 21190  FOR K=I+1 TO NN
  347. 21200   SUM#=SUM#+XPX#(IX,K)*BETA#(K)
  348. 21210  NEXT K
  349. 21220  BETA#(I)=(YS#(I)-SUM#)/XPX#(IX,I)
  350. 21230 NEXT I
  351. 21240 REM SOLVE FOR XPX INVERSE
  352. 21250 IF INV%=0 THEN RETURN
  353. 21260 FOR L=0 TO NN
  354. 21270  FOR I=0 TO NN : Y#(I)=0# : NEXT I
  355. 21280  Y#(L)=1#
  356. 21290  GOSUB 21600
  357. 21300  IN=IND(NN)
  358. 21310  XPXI#(NN,L)=YS#(NN)/XPX#(IN,NN)
  359. 21320  FOR I=NN-1 TO 0 STEP -1
  360. 21330   IX=IND(I) : SUM#=0#
  361. 21340   FOR K=I+1 TO NN
  362. 21350    SUM#=SUM#+XPX#(IX,K)*XPXI#(K,L)
  363. 21360   NEXT K
  364. 21370   XPXI#(I,L)=(YS#(I)-SUM#)/XPX#(IX,I)
  365. 21380  NEXT I
  366. 21390 NEXT L : RETURN
  367. 21500 B#=ABS(XPX#(IND(I),I)) : IB=I : IF I=NN THEN RETURN
  368. 21510 FOR K=I+1 TO NN
  369. 21520  P#=ABS(XPX#(IND(K),I))
  370. 21530  IF P#>B# THEN B#=P# : IB=K
  371. 21540 NEXT K : RETURN
  372. 21600 YS#(0)=Y#(IND(0))
  373. 21610 FOR I=1 TO NN
  374. 21620  IX=IND(I) : SUM#=0#
  375. 21630  FOR K=0 TO I-1
  376. 21640   SUM#=SUM#+XPX#(IX,K)*YS#(K)
  377. 21650  NEXT K
  378. 21660  YS#(I)=Y#(IX)+SUM#
  379. 21670 NEXT I : RETURN
  380. 21900 INVERR=1
  381. 21910 PRINT "NUMERICALLY SINGULAR MATRIX"
  382. 21920 PRINT "EITHER VARIABLE INCLUDED TWICE OR TOO MUCH ";
  383. 21930 PRINT "MULTICOLLINEARITY"
  384. 21940 GOSUB 19000:RETURN
  385. 22000 REM -BLOCK TO COMPUTE NEW VARIABLES
  386. 22010 REM
  387. 22020 CLS
  388. 22022 PRINT "ENTER FORMULA FOR VARIABLE TO BE COMPUTED"
  389. 22025 PRINT "OR <ENTER> TO RETURN TO MAIN MENU" : PRINT
  390. 22030 INPUT ">",ANSWER$ : IF ANSWER$="" THEN GOTO 2000
  391. 22040 IEQ=INSTR(1,ANSWER$,"=")
  392. 22050 IF IEQ<2 THEN GOTO 22020
  393. 22060 A$=LEFT$(ANSWER$,IEQ-1)
  394. 22070 ANSWER$=RIGHT$(ANSWER$,LEN(ANSWER$)-IEQ)+"!"
  395. 22075 IF ANSWER$="!" THEN GOTO 22020
  396. 22080 REM -GET RID OF ANY SPACES
  397. 22090 IF LEFT$(A$,1)=" " THEN A$=RIGHT$(A$,LEN(A$)-1) : GOTO 22090
  398. 22100 IF RIGHT$(A$,1)=" " THEN A$=LEFT$(A$,LEN(A$)-1) : GOTO 22100
  399. 22110 REM -CHECK NAME TABLE FOR THIS VARIABLE
  400. 22115 NAMELOC=-1
  401. 22120 FOR I=0 TO NUMVAR-1
  402. 22130   IF NAMES$(I)=A$ THEN NAMELOC=I : GOTO 22155
  403. 22140 NEXT I
  404. 22150 NAMEIS$=A$ : GOSUB 15170  'ENTER A NEW VARIABLE NAME
  405. 22155 IF NAMELOC=0 THEN PRINT "CANT CHANGE CONST" : GOSUB 19030 : GOTO 22020
  406. 22160 JSTR$=STR$(NAMELOC) : LHV%=NAMELOC
  407. 22170 A$="23050 X#(I,"+JSTR$+")="
  408. 22180 REM -A LOOP STARTS HERE WHICH IDENTIFIES OBJECTS ON RHS
  409. 22190 REM
  410. 22200 S$=" " : NPOS=1 : N1=NPOS : N2=N1
  411. 22210 S$=MID$(ANSWER$,NPOS,1)
  412. 22220 IF S$="!" THEN GOTO 22900
  413. 22230 IF S$=" " THEN NPOS=NPOS+1 : GOTO 22210
  414. 22240 N1=NPOS : IF ASC(S$)<65 OR ASC(S$)>90 THEN GOTO 22650
  415. 22250 REM
  416. 22260 REM - S$ IS FIRST LETTER OF VARIABLE OR FUNCTION
  417. 22270 WHILE (ASC(S$)>=65 AND ASC(S$)<=90) OR (ASC(S$)>=48 AND ASC(S$)<=57)
  418. 22280   NPOS=NPOS+1 : S$=MID$(ANSWER$,NPOS,1)
  419. 22290 WEND
  420. 22300 N2=NPOS : NAMEIS$=MID$(ANSWER$,N1,N2-N1)
  421. 22310 REM
  422. 22320 REM -IS IT A VARIABLE?
  423. 22330 REM
  424. 22340 FOR I=0 TO NUMVAR-1
  425. 22350   IF NAMES$(I)=NAMEIS$ THEN NAMELOC=I : GOTO 22400
  426. 22360 NEXT I
  427. 22363 IF NAMEIS$="RESID" THEN A$=A$+"RESID#(I)" : GOTO 22210
  428. 22366 IF NAMEIS$="SRESID" THEN A$=A$+"SRESID(I)" : GOTO 22210
  429. 22370 REM -NOT A VARIABLE
  430. 22380 GOTO 22550
  431. 22390 REM - A RECOGNIZED VARIABLE, CHECK FOR LAG
  432. 22400 JSTR$=STR$(NAMELOC) : LAG$=""
  433. 22410 IF S$<>"[" THEN GOTO 22480
  434. 22420 N1=NPOS : N2=INSTR(N1,ANSWER$,"]") : NPOS=N2+1
  435. 22430 IF N2=0 THEN GOTO 22520
  436. 22440 LAG$=MID$(ANSWER$,N1+1,N2-N1-1) : LAG=VAL(LAG$)
  437. 22450 IF LAG+NSMPL(1)<0 OR LAG+NSMPL(NR2)>NUMOBS-1 THEN 23300
  438. 22460 IF LAG=0 THEN GOTO 22520
  439. 22470 IF LAG>0 AND LEFT$(LAG$,1)<>"+" THEN LAG$="+"+LAG$
  440. 22480 A$=A$+"X#(I"+LAG$+","+JSTR$+")"
  441. 22490 GOTO 22210
  442. 22500 REM -TREAT LAG ERRORS HERE
  443. 22520 PRINT "INVALID OR ZERO LAG IN ";NAMEIS$
  444. 22522 PRINT PTA$ : GOSUB 19030 : GOTO 22020
  445. 22530 REM -CHECK HERE FOR FUNCTION
  446. 22540 IF S$<>")" THEN GOTO 22590
  447. 22550 FOR I=0 TO NFCN-1
  448. 22560 IF FCN$(I)=NAMEIS$ THEN GOTO 22600
  449. 22570 NEXT I
  450. 22580 REM
  451. 22590 PRINT "UNDEFINED VARIABLE OR FUNCTION: ";NAMEIS$
  452. 22597 PRINT PTA$ : GOSUB 19030 : GOTO 22020
  453. 22600 REM -VALID FUNCTION
  454. 22610 A$=A$+NAMEIS$+"("
  455. 22620 NPOS=NPOS+1 : GOTO 22210
  456. 22650 IF (ASC(S$)<48 OR ASC(S$)>57) AND S$<>"." THEN GOTO 22720
  457. 22660 WHILE ASC(S$)>=48 AND ASC(S$)<=57 OR S$="."
  458. 22670 NPOS=NPOS+1 : S$=MID$(ANSWER$,NPOS,1)
  459. 22680 WEND
  460. 22700 A$=A$+MID$(ANSWER$,N1,NPOS-N1) : GOTO 22210
  461. 22710 REM -CHECK FOR OPERATORS OR PARENTHESES
  462. 22720 IF S$="(" OR S$=")" OR S$="+" OR S$="-" OR S$="*" OR S$="/" OR S$="^" THEN A$=A$+S$ : NPOS=NPOS+1 :GOTO 22210
  463. 22750 PRINT "INVALID CHARACTER ";S$;" IN FORMULA  "
  464. 22760 PRINT PTA$ : GOSUB 19030 : GOTO 22020
  465. 22890 REM -CHECK FOR UNMATCHED PARENTHESES
  466. 22900 N1=0 : N2=0 : NPOS=1 : S$=" "
  467. 22910 WHILE S$<>"!"
  468. 22920 S$=MID$(ANSWER$,NPOS,1)
  469. 22930 IF S$="(" THEN N1=N1+1
  470. 22940 IF S$=")" THEN N2=N2+1
  471. 22950 NPOS=NPOS+1
  472. 22960 WEND
  473. 22970 IF N1<>N2 THEN PRINT "UNMATCHED PARENTHESES IN FORMULA  ";PTA$ :PRINT : GOSUB 19030
  474. 22980 IF N1<>N2 THEN GOTO 22020
  475. 23000 OPEN "FORMULA.BAS" FOR OUTPUT AS #1
  476. 23010 PRINT#1,A$ : CLOSE#1
  477. 23020 CHAIN MERGE "FORMULA.BAS",23025,ALL
  478. 23025 ON ERROR GOTO 23100
  479. 23030 FOR N2=2 TO NR2 STEP 2 : N1=N2-1
  480. 23040 FOR I=NSMPL(N1) TO NSMPL(N2)
  481. 23050 X#(I, 6)=LOG(X#(I, 1))
  482. 23060 NEXT I : NEXT N2 : ON ERROR GOTO 18000
  483. 23070 PRINT : PRINT NAMES$(LHV%);" COMPUTED" : GOSUB 19050
  484. 23080 GOTO 22020
  485. 23100 IF ERR<>2 THEN 23140
  486. 23110 PRINT "SYNTAX ERROR - FORMULA DOESNT MAKE SENSE"
  487. 23120 PRINT PTA$ : GOSUB 19030
  488. 23130 RESUME 23500
  489. 23140 IF ERR<>5 THEN 23180
  490. 23150 PRINT "ERROR IN FORMULA"
  491. 23160 PRINT "PROBABLY TRIED TO TAKE LOG OR SQUARE ROOT OF ZERO OR NEGATIVE NUMBER"
  492. 23170 PRINT PTA$ : GOSUB 19030
  493. 23175 RESUME 23500
  494. 23180 IF ERR<>11 THEN 23190
  495. 23183 PRINT "DIVISION BY ZERO" : PRINT PTA$ : RESUME 23500
  496. 23190 IF ERR<>22 THEN 23280
  497. 23200 PRINT "ERROR IN FORMULA" : PRINT
  498. 23205 PRINT ANSWER$ : PRINT : PRINT PTA$ : GOSUB 19030
  499. 23210 RESUME 23500
  500. 23280 PRINT "ERROR NUMBER ";ERR;" OCCURRED IN FORMULA"
  501. 23290 PRINT PTA$ : GOSUB 19030 : RESUME 23500
  502. 23300 PRINT "LAG TAKES VARIABLE OUTSIDE AVAILABLE DATA"
  503. 23310 PRINT "CHECK SAMPLE RANGE" : PRINT PTA$ : GOSUB 19030
  504. 23320 GOTO 22020
  505. 23500 ON ERROR GOTO 18000 : GOTO 22020
  506. 24000 WLP%=0
  507. 24005 CLS
  508. 24010 PRINT SPC(4) PR$ TAB(40) "DEPENDENT VARIABLE IS ";NAMES$(DEPVAR%)
  509. 24015 IF LP% THEN LPRINT : LPRINT: LPRINT : LPRINT SPC(4) PR$ TAB(40) "DEPENDENT VARIABLE IS ";NAMES$(DEPVAR%)
  510. 24030 GOSUB 24800
  511. 24032 IF INST=0 THEN 24040
  512. 24034 PRINT: PRINT SPC(4) "Instruments: ";: PRINT INST$
  513. 24036 IF LP% THEN LPRINT: LPRINT SPC(4) "Instruments: ";: LPRINT INST$
  514. 24040 IF RHO<>0 THEN PRINT:PRINT SPC(4) "RHO = ";RHO : IF LP% THEN LPRINT:LPRINT SPC(4) "RHO = ";RHO
  515. 24060 PRINT : PRINT TAB(25) "COEFFICIENT" TAB(43) "STANDARD ERROR" TAB(61) "T-STATISTIC"
  516. 24065 IF LP% THEN LPRINT : LPRINT : LPRINT TAB(25) "COEFFICIENT" TAB(43) "STANDARD ERROR" TAB(61) "T-STATISTIC"
  517. 24070 FOR I=0 TO LISTLEN-1
  518. 24080  IF XPXI#(I,I)<0 THEN SE#=0 ELSE SE#=SQR(S2#*XPXI#(I,I))
  519. 24120  PRINT SPC(6) PRNAM$(I) TAB(26) CSNG(BETA#(I)) TAB(44) CSNG(SE#);
  520. 24125  IF LP% THEN LPRINT SPC(6) PRNAM$(I) TAB(26) CSNG(BETA#(I)) TAB(44) CSNG(SE#);
  521. 24130  IF SE#<>0 THEN PRINT TAB(62) CSNG(BETA#(I)/SE#) ELSE PRINT
  522. 24135  IF LP% AND SE#<>0 THEN LPRINT TAB(62) CSNG(BETA#(I)/SE#) ELSE IF LP% THEN LPRINT
  523. 24140  NEXT I : PRINT : IF LP% THEN LPRINT
  524. 24150 P$=SP22$
  525. 24155 IF YSS#=0 THEN 24242
  526. 24160 LSET P$="R-squared" : PI=1-SSR#/YSS# : GOSUB 24500
  527. 24170 LSET P$="Mean of depend var" : PI=YBAR# : GOSUB 24550
  528. 24180 LSET P$="Adjusted R-squared" : PI=1!-(NOBS-1)*S2#/YSS# : GOSUB 24500
  529. 24190 LSET P$="Std dev depend var" : PI=SQR(YSS#/(NOBS-1)) : GOSUB 24550
  530. 24200 LSET P$="Std err of regress" : PI=SQR(S2#) : GOSUB 24500
  531. 24210 LSET P$="Residual sum" : PI=RSUM : GOSUB 24550
  532. 24220 LSET P$="Durbin Watson stat" : PI=DW# : GOSUB 24500
  533. 24230 LSET P$="Sum squared resid" : PI=SSR# : GOSUB 24550
  534. 24235 IF L1=0 THEN 24242
  535. 24240 LSET P$="F statistic" : PI=(1-SSR#/YSS#)*(NOBS-LISTLEN)/((L1)*SSR#/YSS#) : GOSUB 24500
  536. 24242 GOSUB 19150
  537. 24245 IF LP% OR SCR% THEN GOTO 24250 ELSE GOTO 24340
  538. 24250 CLS : PRINT TAB(32) "COVARIANCE  MATRIX" : PRINT
  539. 24255 IF LP% THEN LPRINT : LPRINT : LPRINT TAB(32) "COVARIANCE  MATRIX" : LPRINT
  540. 24257 FLIP%=1
  541. 24260 FOR I=0 TO LISTLEN-1
  542. 24280  FOR J=I TO LISTLEN-1
  543. 24290   LSET P$=PRNAM$(I)+","+PRNAM$(J) : PI=S2#*XPXI#(I,J)
  544. 24320   IF FLIP%>0 THEN GOSUB 24500 ELSE GOSUB 24550
  545. 24325   FLIP%=(-1)*FLIP%
  546. 24330   NEXT J : NEXT I
  547. 24340 GOSUB 19100
  548. 24350 IF LP% OR SCR% THEN GOTO 24005
  549. 24370 RETURN
  550. 24500 PRINT TAB(5) P$;
  551. 24505 IF LP% THEN LPRINT TAB(5) P$;
  552. 24510 IF NOT DP% THEN PRINT TAB(28) PI;
  553. 24515 IF LP% AND NOT DP% THEN LPRINT TAB(28) PI;
  554. 24520 DP%=0 : P$=SP22$ : RETURN
  555. 24550 PRINT TAB(44) P$;
  556. 24555 IF LP% THEN LPRINT TAB(44) P$;
  557. 24560 IF NOT DP% THEN PRINT TAB(66) PI
  558. 24565 IF LP% AND NOT DP% THEN LPRINT TAB(66) PI
  559. 24570 DP%=0 : P$=SP22$ : RETURN
  560. 24800 PRINT SPC(4) "SAMPLE RANGE ";
  561. 24803 IF LP% THEN LPRINT SPC(4) "SAMPLE RANGE ";
  562. 24807 N1=1 : N2=2
  563. 24810 PRINT NSMPL(N1)+1;"-";NSMPL(N2)+1;
  564. 24820 IF LP% THEN LPRINT NSMPL(N1)+1;"-";NSMPL(N2)+1;
  565. 24830 IF N2>=NR2 THEN PRINT : RETURN
  566. 24840 N1=N1+2 : N2=N2+2 : PRINT SPC(2);
  567. 24850 IF LP% THEN LPRINT SPC(2);
  568. 24860 GOTO 24810
  569. 25000 CLS
  570. 25010 PRINT "SCATTER PLOT" : PRINT
  571. 25020 PRINT "VARIABLE FOR X AXIS"
  572. 25030 NEWNAMES=FALSE%
  573. 25040 GOSUB 16800 : IF NAMEERR THEN RETURN
  574. 25050 NX=LISTV(0) : LAGX=LAG(0) : NAM1$=PRNAM$(0)
  575. 25070 PRINT: PRINT "VARIABLE FOR Y AXIS" : GOSUB 16800 : IF NAMEERR THEN RETURN
  576. 25075 NVAR=NX : LAG=LAGX : GOSUB 25700
  577. 25077 XMAX=AMAX : XMIN=AMIN
  578. 25080 NY=LISTV(0) : LAGY=LAG(0) : LAG=LAGY : NVAR=NY : GOSUB 25700
  579. 25090 YMAX=AMAX : YMIN=AMIN : CLS : SCREEN HRES%
  580. 25100 XA%=BOT% : YA%=SLEFT%
  581. 25105 XB=(SRIGHT%-SLEFT%)/(XMAX-XMIN) : YB=(BOT%-TOP%)/(YMAX-YMIN)
  582. 25110 IF XMAX>0 AND XMIN<0 THEN YA%=YA%-XMIN*XB
  583. 25120 IF YMAX>0 AND YMIN<0 THEN XA%=XA%+YMIN*YB
  584. 25130 LINE (SLEFT%,XA%)-(SRIGHT%,XA%)
  585. 25140 LINE (YA%,BOT%)-(YA%,TOP%)
  586. 25160 FOR N2=2 TO NR2 STEP 2 : N1=N2-1
  587. 25170  FOR K=NSMPL(N1) TO NSMPL(N2)
  588. 25180   I=SLEFT%+(X#(K+LAGX,NX)-XMIN)*XB : J=BOT%-(X#(K+LAGY,NY)-YMIN)*YB
  589. 25190   PSET (I,J) : DRAW "U1F1G1H1"
  590. 25200 NEXT K : NEXT N2
  591. 25205 N1=75-LEN(NAM1$) : LOCATE 2,5 : PRINT PRNAM$(0); : LOCATE 24,N1 : PRINT NAM1$;
  592. 25207 GOSUB 19020
  593. 25210 CLS : SCREEN 0 : RETURN
  594. 25300 CLS : XA%=BOT% : YA%=SLEFT%
  595. 25310 PRINT "TIME PLOT" : PRINT : PRINT "VARIABLES TO BE PLOTTED (UP TO 4)"
  596. 25320 NEWNAMES=FALSE% : MAXNAMES=4 : SCALE%=0
  597. 25330 GOSUB 16000 : IF NAMEERR THEN RETURN
  598. 25340 PRINT : INPUT "DO YOU WANT VARIABLES SCALED BY MEANS (Y OR N)? ",S$
  599. 25350 IF S$="Y" OR S$="y" THEN SCALE%=1
  600. 25355 YMIN=1E+37 : YMAX=-YMIN : CLS : SCREEN HRES%
  601. 25360 FOR I=0 TO L1
  602. 25370  NVAR=LISTV(I) : LAG=LAG(I) : GOSUB 25700
  603. 25380  VAVG(I)=1! : IF SCALE% THEN VAVG(I)=AVG : AMAX=AMAX/AVG : AMIN=AMIN/AVG
  604. 25390  IF AMIN<YMIN THEN YMIN=AMIN
  605. 25400  IF AMAX>YMAX THEN YMAX=AMAX
  606. 25410 NEXT I
  607. 25420 XB=(SRIGHT%-SLEFT%)/(NSMPL(NR2)-NSMPL(1))
  608. 25430 YB=(BOT%-TOP%)/(YMAX-YMIN)
  609. 25440 IF YMAX>0 AND YMIN<0 THEN XA%=XA%+YMIN*YB
  610. 25450 LINE (YA%,BOT%)-(YA%,TOP%)
  611. 25460 LINE (SRIGHT%,XA%)-(SLEFT%,XA%)
  612. 25500 FOR I=0 TO L1
  613. 25510  FOR N2=2 TO NR2 STEP 2 : N1=N2-1 : SKIP%=1
  614. 25520   FOR K=NSMPL(N1) TO NSMPL(N2)
  615. 25530    L=SLEFT%+(K-NSMPL(1))*XB
  616. 25540    J=BOT%-(X#(K+LAG(I),LISTV(I))/VAVG(I) - YMIN)*YB
  617. 25550    IF SKIP% THEN PSET (L,J) ELSE LINE -(L,J)
  618. 25555    SKIP%=0
  619. 25560    ON I+1 GOSUB 25800,25810,25820,25830,25840
  620. 25570  NEXT K : NEXT N2 : PSET (SLEFT%,XA%)
  621. 25580 NEXT I
  622. 25590 IF FC%=1 THEN GOSUB 25900
  623. 25600 LOCATE 25,8 : PRINT "LEGEND:";
  624. 25605 FOR I=0 TO L1
  625. 25610  J=POS(0)
  626. 25620  PRINT SPC(5);PRNAM$(I);
  627. 25622  J=16+8*J : PSET (J,SL%)
  628. 25623  ON I+1 GOSUB 25800,25810,25820,25830,25840
  629. 25625 NEXT I
  630. 25650 GOSUB 19020
  631. 25660 CLS : SCREEN 0 : RETURN
  632. 25700 AMIN=1E+37 : AMAX=-AMIN : AVG=0!
  633. 25710 FOR N2=2 TO NR2 STEP 2 : N1=N2-1
  634. 25720  FOR K=NSMPL(N1) TO NSMPL(N2)
  635. 25730   XC=X#(K+LAG,NVAR) : AVG=AVG+XC
  636. 25740   IF XC<AMIN THEN AMIN=XC
  637. 25750   IF XC>AMAX THEN AMAX=XC
  638. 25760 NEXT K : NEXT N2 : AVG=AVG/NOBS : RETURN
  639. 25800 DRAW "U2D4U2R2L4R2" : RETURN
  640. 25810 DRAW "E2G4E2F2H4F2" : RETURN
  641. 25820 DRAW "BE2D4L4U4R4BG2" : RETURN
  642. 25830 DRAW "BU2F2G2H2E2BD2" : RETURN
  643. 25840 RETURN
  644. 25900 IF LOB<NSMPL(1) THEN RETURN
  645. 25910 L=SLEFT%+(LOB+.5-NSMPL(1))*XB
  646. 25920 PSET (L,TOP%) : N2=INT((BOT%-TOP%)/20)
  647. 25925 FOR I=1 TO N2 : DRAW "D4BD13D3" : NEXT I
  648. 25930 RETURN
  649. 26000 REM
  650. 26010 REM FIRST ORDER AUTOCORRELATION
  651. 26020 REM
  652. 26030 CLS : PR$=CO$: RHO=0! : RHOL=-1! : INV%=0
  653. 26040 LROB=NSMPL(NR2) : GOSUB 11700 : IF NAMEERR THEN RETURN
  654. 26050 IF LISTLEN>=NOBS-1 THEN GOTO 11600
  655. 26060 NN=L1 : COUNT%=0 : ERASE XPX#,XPXI#,XBAR#,BETA#
  656. 26070 DIM XPX#(L1,L1),XPXI#(L1,L1),XBAR#(L1),BETA#(L1)
  657. 26080 PRINT:INPUT "DO YOU WANT TO CHOOSE AN INITIAL VALUE FOR RHO? ",ANSWER$
  658. 26090 IF ANSWER$="Y" OR ANSWER$="y" THEN INPUT "STARTING VALUE > ",ANSWER$ : RHO=VAL(ANSWER$)
  659. 26095 GOSUB 11800
  660. 26110 WHILE ABS(RHO-RHOL)>.05 AND COUNT%<8
  661. 26120  GOSUB 26700
  662. 26130  GOSUB 21000
  663. 26140  UL#=0# : RHOL=RHO : SSR#=UL# : RHO=0!
  664. 26150  FOR N2=2 TO NR2 STEP 2 : N1=N2-1
  665. 26160   FOR K=NSMPL(N1) TO NSMPL(N2)
  666. 26170    R#=X#(K,DEPVAR%)
  667. 26180    FOR I=0 TO L1
  668. 26190     R#=R#-BETA#(I)*X#(K+LAG(I),LISTV(I))
  669. 26200    NEXT I
  670. 26210    RESID#(K)=R# : SSR#=SSR#+R#*R#
  671. 26220    RHO=RHO+UL#*R#
  672. 26230    UL#=R#
  673. 26240  NEXT K,N2
  674. 26250  RHO=RHO/(SSR#-UL#*UL#) : COUNT%=COUNT%+1
  675. 26260  PRINT : PRINT "RHO = ";RHO
  676. 26270 WEND
  677. 26280 INV%=1 : GOSUB 21250
  678. 26290 IF INVERR THEN RETURN
  679. 26300 L=NSMPL(1) : XB=SQR(1!-RHO*RHO)
  680. 26310 R#=X#(L,DEPVAR%)
  681. 26320 FOR K=L+1 TO NSMPL(2) : RESID#(K)=X#(K,DEPVAR%)-RHO*X#(K-1,DEPVAR%):NEXT K
  682. 26330 FOR I=0 TO L1
  683. 26340  R#=R#-BETA#(I)*X#(L+LAG(I),LISTV(I))
  684. 26350 NEXT I : R#=R#*XB : RESID#(L)=R#
  685. 26360 SSR#=R#*R# : UL#=R# : RSUM=R# : DW#=0#
  686. 26370 FOR K=L+1 TO NSMPL(2) : R#=RESID#(K)
  687. 26380  FOR I=0 TO L1
  688. 26390   R#=R#-BETA#(I)*(X#(K+LAG(I),LISTV(I))-RHO*X#(K+LAG(I)-1,LISTV(I)))
  689. 26400  NEXT I
  690. 26410  RESID#(K)=R# : SSR#=SSR#+R#*R#
  691. 26420  UL#=R#-UL# : DW#=DW#+UL#*UL# : UL#=R# : RSUM=RSUM+R#
  692. 26430 NEXT K
  693. 26440 DW#=DW#/SSR# : S2#=SSR#/(NOBS-LISTLEN)
  694. 26490 GOSUB 24000
  695. 26495 RHO=0! : RETURN
  696. 26700 XB=1!-RHO*RHO : L=NSMPL(1) : N2=2 : N1=1
  697. 26710 FOR I=0 TO L1
  698. 26720  FOR J=I TO L1
  699. 26730   XPX#(I,J)=XB*X#(L+LAG(I),LISTV(I))*X#(L+LAG(J),LISTV(J))
  700. 26740   FOR K=NSMPL(N1)+1 TO NSMPL(N2)
  701. 26750    XPX#(I,J)=XPX#(I,J)+(X#(K+LAG(I),LISTV(I))-RHO*X#(K+LAG(I)-1,LISTV(I)))*(X#(K+LAG(J),LISTV(J))-RHO*X#(K+LAG(J)-1,LISTV(J)))
  702. 26760 NEXT K:NEXT J:NEXT I
  703. 26780 FOR I=0 TO L1
  704. 26790  Y#(I)=XB*X#(L+LAG(I),LISTV(I))*X#(L,DEPVAR%)
  705. 26800  FOR K=NSMPL(N1)+1 TO NSMPL(N2)
  706. 26810   Y#(I)=Y#(I)+(X#(K+LAG(I),LISTV(I))-RHO*X#(K+LAG(I)-1,LISTV(I)))*(X#(K,DEPVAR%)-RHO*X#(K-1,DEPVAR%))
  707. 26820 NEXT K: NEXT I
  708. 26830 FOR I=0 TO L1
  709. 26840  FOR J=I+1 TO L1
  710. 26850   XPX#(J,I)=XPX#(I,J)
  711. 26860 NEXT J: NEXT I: RETURN
  712. 27000 REM FORECAST EQUATION
  713. 27002 S$=" ": LSET S$=PR$: IF S$<>"O" AND S$<>"T" AND S$<>"C" THEN RETURN
  714. 27005 CLS: PRINT OSF$: PRINT
  715. 27010 L1=LR1: LOB=LROB : ULF=RHO*UL# : ASE=0 : AAE=0 : AR%=0 : S$=" "
  716. 27020 LP%=0 : SCR%=0 : LSET S$=PR$
  717. 27030 GOSUB 20000 : IF ANSWER$="" THEN RETURN
  718. 27050 CLS : NOB=NOBS : IF S$="R" THEN AR%=1 ELSE 27100
  719. 27060 IF LOB>=NSMPL(1)-1 THEN 27100
  720. 27070 FOR I=LOB TO NSMPL(1)-2 : ULF=ULF*RHO : NEXT I
  721. 27100 FOR N2=2 TO NR2 STEP 2 : N1=N2-1
  722. 27110  FOR K=NSMPL(N1) TO NSMPL(N2)
  723. 27120   XB=X#(K,DEPVAR%)
  724. 27125   IF K<=LOB THEN X#(K,MAXVAR-1)=X#(K,DEPVAR%)-RESID#(K) : NOB=NOB-1 : GOTO 27200
  725. 27130   FIT=0
  726. 27140   FOR I=0 TO L1
  727. 27150    FIT=FIT+BETA#(I)*X#(K+LAG(I),LISTRV(I))
  728. 27160    IF AR% THEN FIT=FIT+ULF : ULF=ULF*RHO
  729. 27170   NEXT I
  730. 27180   X#(K,MAXVAR-1)=FIT : ASE=ASE+(XB-FIT)*(XB-FIT)
  731. 27190   AAE=AAE+ABS(XB-FIT)
  732. 27200 NEXT K : NEXT N2
  733. 27210 ASE=SQR(ASE/NOB) : AAE=AAE/NOB
  734. 27220 PEE=(FIT/XB-1)*100
  735. 27230 CLS: PRINT OSF$;":  ";NAMES$(DEPVAR%): PRINT "OBSERVATION","ACTUAL","FITTED","ERROR"
  736. 27235 IF LP% THEN LPRINT "OBSERVATION","ACTUAL","FITTED","ERROR"
  737. 27240 FOR N2=2 TO NR2 STEP 2 : N1=N2-1
  738. 27250  FOR K=NSMPL(N1) TO NSMPL(N2)
  739. 27255   XB=X#(K,DEPVAR%): XC=X#(K,MAXVAR-1)
  740. 27260   PRINT K+1,XB,XC,XB-XC
  741. 27270   IF LP% THEN LPRINT K+1,XB,XC,XB-XC
  742. 27272   IF K=LOB THEN PRINT : IF LP% THEN LPRINT
  743. 27280 NEXT K : NEXT N2
  744. 27290 PRINT : PRINT "ROOT MEAN SQ ERROR ";ASE
  745. 27295 IF LP% THEN LPRINT : LPRINT "ROOT MEAN SQ ERROR ";ASE
  746. 27300 PRINT "MEAN ABSOLUTE ERROR ";AAE
  747. 27305 IF LP% THEN LPRINT "MEAN ABSOLUTE ERROR ";AAE
  748. 27310 PRINT "PERCENTAGE ERROR AT END ";PEE
  749. 27315 IF LP% THEN LPRINT "PERCENTAGE ERROR AT END ";PEE
  750. 27320 GOSUB 19200: IF SCR%=0 THEN 27370
  751. 27330 IH(0)=L1 : IH(1)=LAG(0): IH(2)=LAG(1)
  752. 27340 L1=1 : LAG(0)=0 : LAG(1)=0 : LISTV(0)=DEPVAR% : LISTV(1)=MAXVAR-1
  753. 27345 XA%=BOT% : YA%=SLEFT% : PRNAM$(0)="ACTUAL "+NAMES$(DEPVAR%)
  754. 27347 PRNAM$(1)="FITTED"
  755. 27350 FC%=1 : GOSUB 25355
  756. 27360 L1=IH(0): LAG(0)=IH(1): LAG(1)=IH(2)
  757. 27370 FC%=0 : GOSUB 19100 : IF LP% OR SCR% THEN 27230
  758. 27380 CLS : PRINT "CURRENT"; : PRINT : GOSUB 24800
  759. 27390 PRINT : GOSUB 20000 : RETURN
  760. 28000 CLS: PR$=TSLS$
  761. 28010 RHO=0: INST=0: COR%=0
  762. 28030 GOSUB 11700: IF NAMEERR THEN RETURN
  763. 28035 IF LISTLEN>NOBS THEN GOSUB 11600 : RETURN
  764. 28040 PRINT: PRINT "ENTER INSTRUMENTS"
  765. 28050 MAXNAMES=NUMVAR: NEWNAMES=FALSE%: FORCE0%=FALSE%: INST=1
  766. 28060 GOSUB 16000: INST=0: IF NAMEERR THEN RETURN
  767. 28065 IF L1<LR1 THEN PRINT: PRINT "NOT ENOUGH INSTRUMENTS": GOSUB 19030: RETURN
  768. 28070 K1=MAXVAR: INST$=ANSWER$: ERASE IENDOG
  769. 28075 DIM IENDOG(LR1)
  770. 28080 FOR I=0 TO LR1
  771. 28085  IENDOG(I)=0
  772. 28090  FOR J=0 TO L1
  773. 28095   IF LISTRV(I)=LISTV(J) AND LAGR(I)=LAG(J) THEN 28120
  774. 28100  NEXT J
  775. 28105  K1=K1-1
  776. 28110  IF K1<=NUMVAR THEN PRINT "INSUFFICIENT VARIABLE SPACE": GOSUB 19030: RETURN
  777. 28115  IENDOG(I)=K1
  778. 28120 NEXT I
  779. 28130 IF K1=MAXVAR THEN PRINT "NO ENDOGENOUS RHS VARIABLES": GOSUB 19030: RETURN
  780. 28140 GOSUB 11800
  781. 28150 INST=1: GOSUB 17000
  782. 28155 GOSUB 17500
  783. 28160 NN=L1: GOSUB 21000: INST=0
  784. 28200 NV=0: INV%=0
  785. 28210 IF NV>LR1 THEN 28400 ELSE IF IENDOG(NV)=0 THEN NV=NV+1: GOTO 28210
  786. 28220 LVAR=LISTRV(NV)
  787. 28230 FOR I=0 TO L1: Y#(I)=0
  788. 28240  FOR N2=2 TO NR2 STEP 2: N1=N2-1
  789. 28250   FOR K=NSMPL(N1) TO NSMPL(N2)
  790. 28260    Y#(I)=Y#(I)+X#(K+LAG(I),LISTV(I))*X#(K+LAGR(NV),LVAR)
  791. 28270 NEXT K: NEXT N2: NEXT I
  792. 28290 GOSUB 21130
  793. 28300 FOR N2=2 TO NR2 STEP 2: N1=N2-1
  794. 28310  FOR K=NSMPL(N1) TO NSMPL(N2)
  795. 28320   X#(K,IENDOG(NV))=0
  796. 28330   FOR I=0 TO L1
  797. 28340    X#(K,IENDOG(NV))=X#(K,IENDOG(NV))+BETA#(I)*X#(K+LAG(I),LISTV(I))
  798. 28350 NEXT I: NEXT K: NEXT N2
  799. 28360 NV=NV+1: GOTO 28210
  800. 28400 FOR I=0 TO LR1
  801. 28410  IF IENDOG(I)>0 THEN IV=IENDOG(I) ELSE IV=LISTRV(I)
  802. 28420  FOR J=I TO LR1
  803. 28430   IF IENDOG(J)>0 THEN JV=IENDOG(J) ELSE JV=LISTRV(J)
  804. 28440   XPX#(I,J)=0
  805. 28450   FOR N2=2 TO NR2 STEP 2: N1=N2-1
  806. 28460    FOR K=NSMPL(N1) TO NSMPL(N2)
  807. 28470     XPX#(I,J)=XPX#(I,J)+X#(K+LAGR(I),IV)*X#(K+LAGR(J),JV)
  808. 28480  NEXT K: NEXT N2: NEXT J
  809. 28490  Y#(I)=0
  810. 28500  FOR N2=2 TO NR2 STEP 2: N1=N2-1
  811. 28510   FOR K=NSMPL(N1) TO NSMPL(N2)
  812. 28520    Y#(I)=Y#(I)+X#(K+LAGR(I),IV)*X#(K,DEPVAR%)
  813. 28530 NEXT K: NEXT N2: NEXT I
  814. 28540 LISTLEN=LR1+1: BI%=0: GOSUB 17500
  815. 28550 NN=LR1: INV%=1: INST=0: GOSUB 21000 : IF INVERR THEN RETURN
  816. 28560 FOR I=0 TO LR1: LISTV(I)=LISTRV(I): NEXT I: SWAP L1,LR1
  817. 28570 INST=1: GOSUB 11306: INST=0: RETURN
  818. 29000 LP%=0: IF LR1=0 THEN RETURN
  819. 29005 CLS: S$=" ": LSET S$=PR$
  820. 29010 IF S$<>"O" THEN PRINT OANDI$;" ONLY AVAILABLE FOR ";OLS$: GOSUB 19030: RETURN
  821. 29015 L=0: GOSUB 29300
  822. 29020 FOR N2=2 TO NR2 STEP 2: N1=N2-1
  823. 29030  FOR K=NSMPL(N1) TO NSMPL(N2)
  824. 29040   VII#=0: SRESID(K)=0
  825. 29050   FOR I=0 TO LR1
  826. 29060    VII#=VII#+X#(K+LAGR(I),LISTRV(I))*X#(K+LAGR(I),LISTRV(I))*XPXI#(I,I)
  827. 29065    IF I=0 THEN 29095
  828. 29070    FOR J=0 TO I-1
  829. 29080     VII#=VII#+2*X#(K+LAGR(I),LISTRV(I))*X#(K+LAGR(J),LISTRV(J))*XPXI#(I,J)
  830. 29090    NEXT J
  831. 29095   NEXT I
  832. 29100   IF VII#>=1 THEN PRINT " ELEMENT ERROR" TAB(31) CSNG(1!-VII#): IF LP% THEN LPRINT " ELEMENT ERROR" TAB(31) CSNG(1!-VII#): GOTO 29160 ELSE 29160
  833. 29108   SRESID(K)=RESID#(K)/SQR(S2#*(1-VII#))
  834. 29110   COOKSD=SRESID(K)*SRESID(K)*VII#/((LR1+1)*(1-VII#))
  835. 29120   IF LP% THEN 29130 ELSE IF L<20 THEN 29140
  836. 29125   GOSUB 19030: CLS: L=0: GOSUB 29300: GOTO 29140
  837. 29130   IF L<50 THEN 29140
  838. 29135   LPRINT CHR$(PADV%): GOSUB 29300: L=0
  839. 29140   PRINT TAB(4) K+1 TAB(15) CSNG(RESID#(K)) TAB(31) CSNG(1!-VII#) TAB(47) SRESID(K) TAB(63) COOKSD
  840. 29150   IF LP% THEN LPRINT TAB(4) K+1 TAB(15) CSNG(RESID#(K)) TAB(31) CSNG(1!-VII#) TAB(47) SRESID(K) TAB(63) COOKSD
  841. 29160   L=L+1
  842. 29170  NEXT K
  843. 29175  PRINT: L=L+1: IF LP% THEN LPRINT
  844. 29180 NEXT N2
  845. 29190 GOSUB 19100: IF SCR% OR LP% THEN 29010
  846. 29195 RETURN
  847. 29300 PRINT "OBSERVATION" TAB(16) "RESIDUAL" TAB(35) "Mii" TAB(45) "STUDENT. RESID" TAB(63) "COOKS DISTANCE"
  848. 29310 IF LP% THEN LPRINT: LPRINT "OBSERVATION" TAB(16) "RESIDUAL" TAB(35) "Mii" TAB(45) "STUDENT. RESID" TAB(63) "COOKS DISTANCE"
  849. 29320 RETURN
  850. LPRINT: LPRINT "OBSERVATION" TAB(16